home *** CD-ROM | disk | FTP | other *** search
/ Aminet 40 / Aminet 40 (2000)(Schatztruhe)[!][Dec 2000].iso / Aminet / misc / emu / stlist.lha / stlist / stlist.c < prev    next >
C/C++ Source or Header  |  2000-10-20  |  2KB  |  82 lines

  1. /* Atari .ST diskimages list  */
  2. /* Fabrizio "Lanch" Bartoloni */
  3. /*   lanch@tiscalinet.it      */
  4. /*
  5.  Thanks to: Alfonso "Alfie" Ranieri
  6.             Emiliano "Skywalk3r" Esposito
  7.             Alessandro "Crusher" Gatti
  8. */
  9.  
  10. #include <stdio.h>
  11. #include <stdlib.h>
  12. #include <string.h>
  13.  
  14. static char verstr[] = "$VER: STList 1.2 (19.10.00)";
  15.  
  16. main(int argc, char **argv)
  17. {
  18. char *progname = argv[0];
  19. char *destfile = argv[2];
  20. FILE *fp, *fd;
  21. char *diskimage = argv[1];
  22.  
  23. if (argc != 3)
  24.  {
  25.  fprintf(stderr, "Usage: %s diskimage.st diskcontent.txt \n", progname);
  26.  exit(1);
  27.  }
  28.  
  29. if (fp = fopen(diskimage,"rb")) {
  30. char *buf[16]; /* filenames are 12 characters long */
  31.                /* and they fill the whole space */
  32.                /* then 4 empty + 16 trash and repeat */
  33.  
  34. /* We go to 0x0E00, here is located the beginning      */
  35. /* of the directory listing, else it must be at 0x1600 */
  36. long offset;
  37. int ascii;
  38. long increase;
  39.  
  40.  
  41. offset = 0x0E00L;
  42. fseek(fp,offset,0);
  43. ascii = fgetc(fp);
  44. if ((ascii > 49)&&(ascii < 122))
  45.  
  46.  {
  47.  offset = 0x0DE0L; /* we went one step before for the loop sake */
  48.  }
  49.  
  50. else
  51.  
  52.  {
  53.  offset = 0x15E0L;
  54.  }
  55. increase = 32L;
  56.  if (fd = fopen(destfile, "w")) {
  57. fprintf(fd, " Listing of %s :\n\n", diskimage);
  58. while (*buf != 0) {
  59.  offset = offset + increase;
  60.  fseek(fp,offset,0);
  61.  fgets(buf, sizeof(buf), fp);
  62.  fprintf(fd," %s\n", buf);
  63.                   } /* endwhile */
  64. fprintf(fd,"\n End of listing.\n");
  65. exit(0);
  66.                                } /* endif fopen write */
  67.                              else
  68.                              {
  69.                              fprintf(stderr," Unable to create %s\n", destfile);
  70.                              exit(1);
  71.                              }
  72.                                 } /* endif fopen read */
  73.               else
  74.                   {
  75.                   fprintf(stderr, "Unable to open file: %s\n", diskimage);
  76.                   exit(1);
  77.                   }
  78. fclose(fd);
  79. fclose(fp);
  80. return(0);
  81.  }
  82.